<?php
namespace app\common\model;

use think\Model;
use think\Session;

class Order extends Model
{
    protected $orderInfo;       //订单信息模型
    //自动完成字段
    protected $auto = ['order_sn'];

    //开启构造方法导致无法查询,可以使用 initialize() 方法替换
    public function initialize()
    {
        //if ($this->orderInfo == null) $this->orderInfo = new OrderInfo();
    }

    //订单号
    public function setOrderSnAttr()
    {
        return order_sn();
    }
    //用户id
    public function setUserIdAttr()
    {
        return Session::get('user_id');
    }

    /**
     * 后台订单列表
     * @return mixed
     */
    public function _list()
    {
        return $this->order('id desc')->paginate(5);
    }

    /**
     * 分页方法
     * @param int $listRows     每页展示条数
     * @return int|mixed
     */
    public function pageQuery($listRows = 10, $where = []){
        //$key = input('get.key'); //$where = []; //-- 查询条件
        $page = input('get.page') < 1 ? 1 : input('get.page'); //当前页
        $total = $this->where($where)->count();
        $data['results'] = $this->where($where)->limit(($page - 1) * $listRows, $listRows + 0)->order('id desc')->select();
        $data['page'] = [
            'total'         =>  $total,         //总记录数
            'pageCount'     =>  ceil($total/$listRows),     //总页数
            'currentPage'   =>  $page,          //当前页
        ];
        return $data;
    }

    /**
     * 模型数据验证 -- 用于 新增和修改
     * @param $data
     * @return bool|string
     */
    public function data_verify($data)
    {
        $update = (isset($data['id']) && $data['id'] != 0)  ? ['id' => $data['id']] : []; //是否更新操作
        //var_dump($data);exit();
        $data['user_id'] = Session::get('user_id');
        $result = $this->validate(true)->allowField(true)->save($data, $update);
        if(1 !== $result){
            //  验证失败 输出错误信息
            $error = $this->getError();
            if (is_array($error)) {
                return $error[key($error)];
            }else {
                return $error;
            }
        }
        return true;
    }

    /**
     * 一对一 关联 boss_refund 表的数据
     */
    public function refundInfo()
    {
        return $this->hasOne('refund', 'order_id','id');
    }

    /**
     * 获取指定对象
     */
    public function getById($id)
    {
        $user = cookie('user');

        if (empty($user)) return false;
        $user_id = decode($user);
        if ($id<=0 || floor($id) != $id) return false;
        $item = $this->where(['id'=>$id])->find();

        // 增加后台管理员不用验证权限
        return (\think\Session::get('uid') > 0) ? $item : ($item['user_id'] == $user_id) ? $item : false;
    }

    /**
     * 根据 用户id 和 状态 获取订单列表
     * @param $user_id
     * @param $status
     * @return false|\PDOStatement|string|\think\Collection
     */
    public function getByUserId($user_id, $status)
    {
        if (empty($user_id)) return false;
        $where = ['user_id' => $user_id];
        if (isset($status) && $status !== ''){
            if ($status == 4) {
                $where['pay_status'] = [ ['=','3'],['=','4'] , 'or'];
            }else if ($status == 2){
                $where['pay_status'] = [ ['=','2'],['=','5'] , 'or'];
            }else{
                $where['pay_status'] = $status;
            }
        }
        return $this->where($where)->order('id desc')->select();
    }

    /**
     * 删除
     */
    public function del($id){
        if (!$id || !is_int($id)) return false;
        $result = $this->get($id);
        //$result = Category::get($id);
        if(false !== $result){
            if ( $result->delete() ) {
                return true;
            }else {
                return false;
            }
        }else{
            return false;
        }
    }

    /**
     * 审核用户的充值记录
     * @param string $id
     * @return bool
     */
    public function check($id){
        if (!$id || !is_int($id)) return false;
        $result = $this->get($id);
        //$result = Config::get($id);
        if(false !== $result)
        {
            $result->order_status = 1; //已确认
            $result->pay_time = time(); //已确认
            //$user_id = $result->user_id;
            if ( $result->save() )
            {
                // 用户表 recharge_money 字段增加
                $user = \app\admin\model\User::get($result->user_id);
                $user->recharge_money += $result->money;
                $user->save();
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
}